// pages/nfc-write/nfc-write.js
import { validateUrlScheme, createNfcRecords, nfcManager } from '../../utils/nfc.js'

Page({
  data: {
    urlScheme: '',
    isValidScheme: false,
    isWriting: false,
    errorMessage: '',
    successMessage: ''
  },

  onLoad() {
    this.initNfc()
  },

  onShow() {
    // 页面显示时重新初始化NFC
    this.initNfc()
  },

  onHide() {
    // 页面隐藏时停止NFC
    this.stopNfc()
  },

  onUnload() {
    this.stopNfc()
  },

  // 初始化NFC
  initNfc() {
    console.log('NFC写入页面初始化')
    
    // 使用全局NFC管理器初始化
    const isSupported = nfcManager.init('nfc-write')
    
    if (!isSupported) {
      wx.showToast({
        title: '设备不支持NFC',
        icon: 'none'
      })
    }
    
    console.log('NFC写入页面初始化完成')
  },

  // 停止NFC
  stopNfc() {
    try {
      // 使用全局NFC管理器清理页面资源
      nfcManager.cleanupPage('nfc-write')
      console.log('NFC写入页面已停止')
    } catch (error) {
      console.log('停止NFC写入时出错:', error)
    }
    
    // 重置所有状态
    this.setData({ 
      isWriting: false,
      errorMessage: '',
      successMessage: ''
    })
  },

  // 输入框内容变化
  onInputChange(e) {
    const scheme = e.detail.value
    const isValid = validateUrlScheme(scheme)
    this.setData({
      urlScheme: scheme,
      isValidScheme: isValid,
      errorMessage: '',
      successMessage: ''
    })
  },

  // 验证URL Scheme格式
  validateScheme() {
    console.log(this.data.urlScheme)
    const scheme = this.data.urlScheme.trim()
    if (!scheme) {
      this.setData({ errorMessage: '请输入URL Scheme' })
      return false
    }
    if (!validateUrlScheme(scheme)) {
      this.setData({ errorMessage: 'URL Scheme格式不正确，请确保是微信小程序的URL Scheme' })
      return false
    }

    return true
  },


  // 写入数据到NFC标签
  writeToNfc(nfcData) {
    try {
      // 检查NFC管理器是否初始化
      if (!nfcManager.isInitialized) {
        console.error('NFC管理器未初始化')
        this.setData({
          isWriting: false,
          errorMessage: 'NFC未初始化，请重新打开页面'
        })
        return
      }

      // 检查标签是否支持NDEF
      if (!nfcData.techs || !nfcData.techs.includes('NDEF')) {
        console.error('标签不支持NDEF')
        this.setData({
          isWriting: false,
          errorMessage: 'NFC标签不支持NDEF格式，无法写入数据'
        })
        return
      }

      // 从全局NFC管理器获取ndef对象
      const ndef = nfcManager.getNdef()
      if (!ndef) {
        console.error('NFC ndef对象不存在')
        this.setData({
          isWriting: false,
          errorMessage: '无法获取NDEF对象，请检查NFC标签是否支持NDEF'
        })
        return
      }

      // 连接NDEF
      ndef.connect({
        success: () => {
          console.log('NDEF连接成功')
          this.performWrite(ndef)
        },
        fail: (err) => {
          console.error('NDEF连接失败:', err)
          this.setData({
            isWriting: false,
            errorMessage: 'NDEF连接失败: ' + (err.errMsg || err.message || '未知错误')
          })
        }
      })
    } catch (error) {
      console.error('创建NFC记录失败:', error)
      this.setData({
        isWriting: false,
        errorMessage: '创建NFC记录失败: ' + error.message
      })
    }
  },

  // 执行写入操作
  performWrite(ndef) {
    try {
      const records = createNfcRecords(this.data.urlScheme)
      console.log('准备写入NFC记录:', records)
      
      // 使用正确的API写入数据
      ndef.writeNdefMessage({
        records: records,
        success: () => {
          console.log('NFC写入成功')
          
          // 断开NDEF连接
          ndef.close()
          
          // 自动停止NFC
          this.stopNfc()
          
          this.setData({
            successMessage: 'NFC标签写入成功！现在可以用这个标签打开小程序了。'
          })
          
          wx.showModal({
            title: '写入成功',
            content: 'NFC标签已成功写入小程序URL Scheme',
            showCancel: false
          })
        },
        fail: (err) => {
          console.error('NFC写入失败:', err)
          
          // 断开NDEF连接
          ndef.close()
          
          // 自动停止NFC
          this.stopNfc()
          
          this.setData({
            errorMessage: '写入失败: ' + (err.errMsg || err.message || '未知错误')
          })
          
          wx.showModal({
            title: '写入失败',
            content: 'NFC标签写入失败，请检查标签是否支持写入',
            showCancel: false
          })
        }
      })
    } catch (error) {
      console.error('执行写入操作失败:', error)
      this.stopNfc()
      this.setData({
        errorMessage: '执行写入操作失败: ' + error.message
      })
    }
  },

  // 停止写入
  onStopWrite() {
    this.stopNfc()
  },

  // 开始写入
  onStartWrite() {
    if (!this.validateScheme()) {
      return
    }

    // 检查NFC管理器
    if (!nfcManager.isInitialized || !nfcManager.isSupported()) {
      wx.showToast({
        title: 'NFC不可用',
        icon: 'none'
      })
      return
    }

    this.setData({ 
      isWriting: true, 
      errorMessage: '',
      successMessage: ''
    })

    // 使用全局NFC管理器开始发现
    const success = nfcManager.startDiscovery((res) => {
      console.log('发现NFC标签:', res)
      this.writeToNfc(res)
    }, 'nfc-write')

    if (success) {
      wx.showToast({
        title: '请将NFC标签贴近手机',
        icon: 'none',
        duration: 2000
      })
    } else {
      this.setData({ 
        isWriting: false,
        errorMessage: 'NFC启动失败'
      })
    }
  },

  // 清空输入
  onClear() {
    this.setData({
      urlScheme: '',
      isValidScheme: false,
      errorMessage: '',
      successMessage: ''
    })
  },

  // 获取示例URL Scheme
  onGetExample() {
    const exampleScheme = 'weixin://dl/business/?appid=wxf7119af6b34aaa88&path=pages/index/index'
    const isValid = validateUrlScheme(exampleScheme)
    this.setData({
      urlScheme: exampleScheme,
      isValidScheme: isValid,
      errorMessage: '',
      successMessage: ''
    })
    
    wx.showToast({
      title: '已填入示例',
      icon: 'success'
    })
  }
})
